package com.ty.user.starter.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ty.user.starter.entity.Menu;
import com.ty.user.starter.entity.User;
import com.ty.user.starter.entity.dto.MenuDto;
import com.ty.user.starter.entity.vo.MenuVo;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 * 菜单表 服务类
 * </p>
 *
 * @author minku
 * @since 2021-10-16
 */
@Validated
public interface MenuService extends IService<Menu> {

    /**
     * 新增
     *
     * @param dto 菜单信息
     */
    void add(@Valid MenuDto dto);

    /**
     * 编辑
     *
     * @param dto 菜单信息
     */
    void edit(@Valid MenuDto dto);

    /**
     * 删除
     *
     * @param id        菜单id
     * @param recursion 是否递归删除子菜单 - <b>用于测试环境,正式环境不推荐递归删除</b>
     */
    void delete(long id, boolean recursion);

    /**
     * 树形菜单列表
     *
     * @return 菜单列表
     */
    List<MenuVo> findAll();


    /**
     * 查询用户的权限列表
     * 如果是超级管理员{@link User#getAdmin()}以直接返回所有权限
     *
     * @param user 用户信息
     * @return 权限菜单
     */
    List<MenuVo> getPermissions(@NotNull User user);
}
